const joi = require('joi');

// 用户相关验证规则
const username = joi.string().pattern(/^[\S]{1,6}$/).required();
const password = joi.string().pattern(/^[\S]{6,12}$/).required();

// 文章基础字段
const id = joi.number().min(1).integer().required();
const title = joi.string();
const content = joi.string();
const cover_image = joi.string().uri(); // URI格式验证
const category = joi.string();
const summary = joi.string();
const tag = joi.string();
const tags = joi.array().items(tag).min(1);
const page = joi.number().integer().min(1).default(1);
const size = joi.number().integer().min(1).default(10);

// 用户验证规则
exports.userCheck = {
    body: { username, password },
};

// 文章查询
exports.findArticleCheck = {
    query: { category, page, size },
};

// 文章添加
exports.addArticleCheck = {
    body: {
        title: title.required(),
        content: content.required(),
        cover_image: cover_image.required(),
        deleted: joi.number().integer().min(0).max(1).default(0),
        category: category.required(),
        summary: summary.required(),
        tags: tags.required(),
    },
};
// 文章修改
exports.updateArticleCheck = {
   
    body: {
        id,
        title: title.optional(),
        content: content.optional(),
        cover_image: cover_image.optional(),
        category: category.optional(),
        summary: summary.optional(),
        tags: tags.optional(),
    },
};

// 文章删除
exports.deleteArticleCheck = {
    query: { id },
};

// 文章详情
exports.getArticleDetail = {
    query: { id: id.required() },
};

// ============== 新增访问日志记录规则 ==============
/**
 * 访问日志记录校验规则
 * - article_id: 文章ID (必填)
 * - ip: 访问者IP地址 (必填)
 * - ua: 用户代理信息 (必填)
 * - location: 访问地区 (可选)
 */
exports.recordVisitCheck = {
    body: {
        article_id: id,
        ip: joi.string().ip({
            version: ['ipv4', 'ipv6'],
            cidr: 'forbidden'
        }).required(),
        ua: joi.string().max(500).required(),
        location: joi.string().max(100).optional()
    }
};

// ============== 完善的文章统计校验规则 ==============
exports.statisticsCheck = {
    query: {
        // 基础过滤条件
        id: id.optional(),
        title: title.optional(),
        category: category.optional(),

        // 时间范围
        start_date: joi.date().iso().optional(),
        end_date: joi.date().iso().min(joi.ref('start_date')).optional(),

        // 统计维度
        type: joi.string().valid(
            'daily',        // 按日统计
            'weekly',       // 按周统计
            'monthly',      // 按月统计
            'yearly',       // 按年统计
            'category',     // 按分类统计
            'article',      // 按文章统计
            'location',     // 按地区统计
            'device'        // 按设备类型统计
        ).default('daily'),

        // 统计指标
        metrics: joi.array().items(
            joi.string().valid(
                'pv',           // 页面浏览量
                'uv',           // 独立访客数
                'avg_duration', // 平均停留时间
                'bounce_rate',  // 跳出率
                'locations',    // 地区分布
                'devices'       // 设备分布
            )
        ).default(['pv', 'uv']),

        // 结果限制
        limit: joi.number().integer().min(1).max(1000).default(10),

        // 特殊参数
        include_details: joi.boolean().default(false) // 是否包含详细数据
    },
};

// ============== 阅读量更新校验规则 ==============
/**
 * 阅读量增量更新校验
 * - id: 文章ID (必填)
 * - increment: 增量值 (默认为1)
 */
exports.updateViewCountCheck = {
    body: {
        id: id,
        increment: joi.number().integer().min(1).max(100).default(1)
    }
};